Streaming over MoQ
RidgeRun's GstMoQ plugin enables developers to stream audio and video through MoQ on the IQ-9075. This page provides the instructions on how to install the GstMoQ plugin, verified pipelines and performance results. The Dragonwing is capable of 4K@30fps streaming with MoQ.
Problems running the pipelines shown on this page? Please see our GStreamer Debugging guide for help.
Using RidgeRun's MoQ
GstMoQ brings Media over QUIC (MoQ) streaming capabilities directly into GStreamer pipelines, enabling modern, low-latency, and scalable media delivery over QUIC / HTTP-3. Designed for next-generation media transport, GstMoQ allows developers to publish and subscribe to audio and video streams , ideal for edge, and AI-driven systems.

Setup
To install gst-moq library follow instructions to install
dependencies and building the plugin. On Step 4 of building the plugin, change the plugin path to:
export PREFIX=$HOME/.local
export GST_PLUGIN_PATH="$PREFIX/lib/aarch64-linux-gnu/gstreamer-1.0:${GST_PLUGIN_PATH}"
After installation, if you start a new sesion you always need to export the environment:
export GST_PLUGIN_PATH=$HOME/gst-plugins-rs/target/release
cd gst-rrmoq
export PREFIX=$HOME/.local
export GST_PLUGIN_PATH="$PREFIX/lib/aarch64-linux-gnu/gstreamer-1.0:${GST_PLUGIN_PATH}"
Pipeline Testing
Single track video streaming with local relay
On board side
BOARD_IP=X.X.X.X
and, then, choose one source:
Stream videotestsrc
gst-launch-1.0 rrmoqbin channel=test-video name=bin relay-server-host-addr=http://$BOARD_IP:4443 sink_0::track-name=video videotestsrc is-live=true ! videoconvert ! x264enc ! queue ! bin.sink_0
Stream camera
gst-launch-1.0 rrmoqbin channel=test-video name=bin relay-server-host-addr=http://$BOARD_IP:4443 sink_0::track-name=video qtiqmmfsrc camera=0 ! video/x-raw,format=NV12,width=1280,height=720,framerate=30/1 ! queue max-size-buffers=4 leaky=downstream ! v4l2h264enc qos=true ! video/x-h264,profile=high,stream-format=byte-stream,alignment=au ! h264parse ! queue ! bin.sink_0
Stream from file
gst-launch-1.0 rrmoqbin channel=test-video name=bin relay-server-host-addr=http://$BOARD_IP:4443 sink_0::track-name=video filesrc location=camera-test.mp4 ! qtdemux ! h264parse ! v4l2h264dec capture-io-mode=dmabuf output-io-mode=dmabuf ! video/x-raw,format=NV12,width=1280,height=720,framerate=30/1,interlace-mode=progressive,colorimetry=bt601 ! v4l2h264enc ! h264parse ! queue ! bin.sink_0
On host side
BOARD_IP=X.X.X.X
gst-launch-1.0 rrmoqsrc relay-url=http://$BOARD_IP:4443 channel=test-video name=src src.video ! decodebin ! videoconvert ! autovideosink
Multiple track video streaming with local relay
Send all videos at the same time
On board side
gst-launch-1.0 -v \
rrmoqbin relay-mode=local relay-server-host-addr=https://$BOARD_IP:4443 name=moq channel=test \
sink_0::track-name=video1 sink_0::channel=test sink_1::track-name=video2 sink_1::channel=test sink_2::track-name=video3 sink_2::channel=test \
videotestsrc is-live=true pattern=smpte ! videoconvert ! x264enc speed-preset=ultrafast tune=zerolatency ! h264parse ! queue ! moq.sink_0 \
qtiqmmfsrc camera=0 ! video/x-raw,format=NV12,width=1280,height=720,framerate=30/1 ! queue max-size-buffers=4 leaky=downstream ! v4l2h264enc qos=true ! video/x-h264,profile=high,stream-format=byte-stream,alignment=au ! h264parse ! queue ! moq.sink_1 \
filesrc location=camera-test.mp4 ! qtdemux ! h264parse ! v4l2h264dec capture-io-mode=dmabuf output-io-mode=dmabuf ! video/x-raw,format=NV12,width=1280,height=720,framerate=30/1,interlace-mode=progressive,colorimetry=bt601 ! v4l2h264enc ! h264parse ! queue ! moq.sink_2
On host side
Change to src.video1, src.video2 and src.video3
gst-launch-1.0 rrmoqsrc relay-url=http://$BOARD_IP:4443 channel=test name=src src.video3 ! decodebin ! videoconvert ! autovideosink
Performance
The performance of this element was measured using the camera with different resolutions and NV21 format. This is the test pipeline:
gst-launch-1.0 rrmoqbin channel=test-video name=bin relay-server-host-addr=http://$BOARD_IP:4443 sink_0::track-name=video qtiqmmfsrc camera=0 ! video/x-raw,format=NV12,width=$WIDTH,height=$HEIGHT,framerate=30/1 ! queue max-size-buffers=4 leaky=downstream ! v4l2h264enc qos=true ! video/x-h264,profile=high,stream-format=byte-stream,alignment=au ! h264parse ! queue ! perf print-cpu-load=1 ! fakesink
Performance results
The following table presents the performance results:
| Resolution | %MEM | RSS (KB) | BPS | Mean BPS | FPS | Mean FPS | CPU (%) |
|---|---|---|---|---|---|---|---|
| 1280x720 | 0.2 | 75796 | 1999272.000 | 2056740.444 | 29.964 | 29.902 | 13 |
| 1920x1080 | 0.2 | 77504 | 10430992.000 | 9788049.000 | 30.200 | 29.930 | 13 |
| 3840x2160 | 0.2 | 86884 | 25313248.000 | 25135858.857 | 30.017 | 29.952 | 13 |
Element latency
The following table shows the individual element latency, excluding the camera and the sink elements:
| element | count | avg_ms | min_ms | max_ms | p50_ms | p90_ms | p95_ms | p99_ms |
|---|---|---|---|---|---|---|---|---|
| v4l2h264enc0 | 113 | 3.170 | 2.504 | 9.882 | 3.176 | 3.329 | 3.456 | 3.529 |
| queue0 | 113 | 0.363 | 0.055 | 0.758 | 0.387 | 0.622 | 0.644 | 0.682 |
| queue1 | 113 | 0.164 | 0.036 | 0.619 | 0.091 | 0.454 | 0.519 | 0.549 |
| h264parse0 | 113 | 0.127 | 0.092 | 0.400 | 0.112 | 0.174 | 0.189 | 0.272 |
| capsfilter0 | 113 | 0.081 | 0.055 | 0.127 | 0.081 | 0.088 | 0.114 | 0.122 |
| capsfilter1 | 113 | 0.071 | 0.047 | 0.122 | 0.065 | 0.097 | 0.106 | 0.116 |
| perf0 | 113 | 0.069 | 0.033 | 0.426 | 0.059 | 0.088 | 0.155 | 0.333 |
The following table shows the average latency of the pipeline segment from the camera element src pad to the perf element src pad.
| metric | value |
|---|---|
| TOTAL_AVG_SUM_MS | 4.045 |
| TOTAL_AVG_SUM_NS | 4044803 |
FAQ
- What is GstMoQ?
- GstMoQ is RidgeRun's GStreamer integration for Media over QUIC workflows.
- How can I obtain GstMoQ?
- Contact RidgeRun to get a free evaluation version for validation purposes.
Related pages
- Qualcomm Dragonwing Technical Guide/Multimedia Support/Streaming
- Qualcomm Dragonwing Technical Guide/Multimedia Support/Streaming/UDP
- Qualcomm Dragonwing Technical Guide/Multimedia Support/Streaming/RTSP
- RidgeRun Media Over Quic GStreamer Plugin GstMoQ